home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 376-400 / disk_376 / plotter / plotter.doc < prev    next >
Text File  |  1992-05-06  |  13KB  |  229 lines

  1.   Plotter V3.71 
  2.   © by Rüdiger Dreier 1988/9/90
  3.   Plotter ist FREEWARE
  4.        
  5.   DER AUTOR ÜBERNIMMT KEINERLEI HAFTUNG FÜR SCHÄDEN, DIE AUS DER SACH- ODER
  6.   UNSACHGEMÄSSEN BENUTZUNG DES PROGRAMMS ENTSTEHEN !!
  7.   WEITERHIN  WIRD  KEINE  HAFTUNG  FÜR  DIE  FEHLERFREIHEIT  DES  PROGRAMMS
  8.   ÜBERNOMMEN !!
  9.   BENUTZUNG AUF EIGENE GEFAHR !
  10.   
  11.   Der  Plotter  ist  ein Programm  zum  zeichnen  zweidimensionaler  mathe-
  12.   matischer  Funktionen. Es können 10  Funktionen eingegeben und gezeichnet
  13.   werden. Zusätzlich kann man sich  von jeder Funktion die erste und zweite
  14.   Ableitung zeichnen lassen  (jeweils nummerisch oder symbolisch bestimmt).
  15.   Es  eignet sich zur  Unterstützung bei Kurvendiskussionen,  um die selbst
  16.   errechneten  Ergebnisse  zu kontrollieren.  Das  Programm  fertigt  keine
  17.   komplette Kurvendiskussion an.
  18.        
  19.   Anforderungen an die Rechnerkonfiguration:
  20.   
  21.   Das  Programm läuft unter  Kickstart 1.2 und 1.3,  512kB Speicher sollten
  22.   mindestens vorhanden sein, besser mehr. Der Stack sollte mindestens 20000
  23.   Bytes betragen,  sonst kommt  es  zu leicht  zu Abstürzen.  Im  logischen
  24.   Device LIBS: müssen sich drei Libraries befinden:
  25.            - mathieeedoubbas.library
  26.            - mathieeedoubtrans.library
  27.            - tool.library (in diesem Ordner enthalten)
  28.        
  29.   Die Menupunkte:
  30.   C-Plot
  31.    Genauigkeit
  32.     Es  erscheinen 3  SubMenuPunkte, mit  denen die  Genauigkeit auf klein,
  33.     mittel oder groß gesetzt werden kann. Je genauer gezeichnet wird, desto
  34.     mehr Zeit wird benötigt.
  35.    Intervall
  36.     Nach  Anwahl   dieses   Menupunktes  erscheint   ein  Fenster   mit   4
  37.     Stringgadgets,  in denen  die alten Intervallgrenzen  (der Bereich, für
  38.     den  die Funktion gezeichnet  werden soll) anzeigt  werden. Diese Werte
  39.     kann man  wie  gewohnt  verändern. Der  eingegebene  Term muß  nur  den
  40.     Anforderungen entsprechen, die auch für die Funktionen gelten. Außerdem
  41.     darf   die  linke/untere  Grenze  nicht   größer/gleich  sein  als  die
  42.     rechte/obere. In  solchen Fällen erscheint das  Fenster nach Anwahl des
  43.     OK-Gadget (oder <RETURN> im vierten Stringgadget) wieder.
  44.    Löschen
  45.     Die    auf   dem   Bildschirm   dargestellten    Funktionen   und   das
  46.     Koordinatenkreuz werden  gelöscht. Geschieht automatisch beim Verändern
  47.     der Intervallgrenzen und Auflösung.
  48.    Drucken
  49.     Der für die Darstellung auf dem Bildschirm benutzte Rastport wird
  50.     auf dem Drucker so groß wie möglich ausgegeben.
  51.    Bereich mit Maus auswählen
  52.     Dieser  Menupunkt stellt  eine  Art  Lupenfunktion zur  Verfügung.  Das
  53.     Intervall, das  als nächstes gezeichnet werden soll,  kann mit der Maus
  54.     ausgewählt werden.  Die obere/linke Ecke wird  mit der Maus angefahren,
  55.     die  linke Maustaste gedrückt  und gehalten und  dann die rechte/untere
  56.     Ecke  ausgewählt  und   die  Maustaste  losgelassen.  Danach  wird  der
  57.     Bildschirm gelöscht.  Während die Maustaste gedrückt  wird, wird um den
  58.     momentan  ausgewählten Bereich ein Kasten  gezeichnet. Wurde die größte
  59.     Darstellungsart   (s.u.)ausgewählt,   so   kann   jederzeit   mit   den
  60.     Cursurtasten und ESC in der gesammten Darstellung gescrollt
  61.     werden.
  62.    Konstanten
  63.     Ein  Fenster ähnlich  dem bei INTERVALL  erscheint. In  diesem kann man
  64.     vier  Konstanten (a,b,c,d)  bestimmen, die bei  Intervall und innerhalb
  65.     der Funktionen benutzt werden können. 
  66.    About
  67.     Dieser  Menupunkt zeigt  die Versionsnummer  und das  Datum der letzten
  68.     Veränderung   an  dem   Programm  an.  Durch   Anklicken  des  Fensters
  69.     verschwindet es wieder.
  70.    ENDE
  71.     Das Programm wird beendet (mit Sicherheitsabfrage).
  72.          
  73.   Funktion
  74.    Ändern
  75.     Nach Anwahl  dieses Menupunktes erscheint ein  Untermenu mit den bisher
  76.     eingegebenen Funktionen  (es werden die ersten  14 Zeichen der Funktion
  77.     angezeigt). Wird einer dieser Funktionen angewählt, so erscheint sie in
  78.     einem Stringgadget, so daß  sie verändert werden kann. Die Funktion muß
  79.     mathematisch korrekt  eingegeben  werden. Jede  Funktion darf  aus  den
  80.     Rechenarten +,-,*,/,^ und den  Funktionen sin, cos, tan, log, int, sgn,
  81.     abs, sqr, asin, acos, atan, ln und  den Konstanten a, b, c, d, e und pi
  82.     sowie der Variablen x  bestehen. Es muß alles klein geschrieben werden.
  83.     Zahlen dürfen normal (1; 1.1; .1) oder in Potenzschreibweise (3e5,5d-7)
  84.     eingegeben  werden. Bei Potenzen darf  vor dem Exponenten ein  + oder -
  85.     stehen, ohne  das der  Exponent gleich  geklammert werden  muß. In  der
  86.     Regel  sollte man aber  alles so klammern,  daß zweifelsfrei festgelegt
  87.     ist,  in welcher  Reihenfolge der Term  berechnet werden  soll. Es gilt
  88.     natürlich Potenz- vor Punkt-vor Strichrechnung. Wenn unpaarige Klammern
  89.     vorhanden sind, erscheint das Stringgadget gleich wieder, damit man die
  90.     Funktion korrigieren kann.
  91.    Funktion, 1./2. Ableitung num/symb:
  92.     Bei  jedem dieser  5 Menupunkte  erscheint wieder  das Untermenu. Durch
  93.     Anwahl eines Untermenupunktes  kann man dann bestimmen, welche Funktion
  94.     man  gezeichnet haben  will.  Numerische  Ableitungen werden  nach  dem
  95.     Sekantenverfahren bestimmt, dabei  können schon in der ersten Ableitung
  96.     Ungenauigkeiten auftreten,  die  in der  zweiten Ableitung  dann  schon
  97.     recht  deutlich  werden.  Beim  symbolischen  Ableiten  wird  erst  die
  98.     Ableitung als Term bestimmt  und dann normal gezeichnet. Dabei kommt es
  99.     dann nach  Anwahl der Funktion zu einer kurzen  Verzögerung, in der die
  100.     Ableitung bestimmt wird. Diese  Methode ist genauer, hat aber auch ihre
  101.     Nachteile:  Funktionsterme dürfen höchstens 500  Zeichen lang sein, bei
  102.     komplizierten  Funktionen kann  diese Grenze bei  der zweiten Ableitung
  103.     leicht überschritten werden.  Daher sollte der Programmteil Ableitung.c
  104.     immer mit Stack-Checking  compiliert werden (Lattice-C: ohne -v). Damit
  105.     kann man  einige Abstürze  umgehen. Tritt  bei dieser  Version  Plotter
  106.     (ohne -v  compiliert) ein  Stacküberlauf auf,  so erscheint  ein  Auto-
  107.     requester,  der einen darauf  aufmerksam macht und  die Möglichkeit zum
  108.     Abbruch des  Programms gibt. Dabei wird der  Screen des Programms nicht
  109.     geschlossen, dieser Speicher geht also verloren (leider). Aber immerhin
  110.     ist der Rechner nicht aus heiterem Himmel abgestürzt.
  111.     
  112.     Außerdem sind einige der  oben erwähnten Funktionen nicht ohne weiteres
  113.     abzuleiten.  Die Ableitung von sgn  ist z.B. fast überall  Null, nur um
  114.     Null herum  ist sie  nicht  definiert. Das  Programm setzt  dafür  aber
  115.     einfach Null  ein.  Außerdem wird  z.B. die  Ableitung  von ln  zu  1/x
  116.     bestimmt  und  auch  so gezeichnet,  d.h.  auch  im  negativen  Bereich
  117.     gezeichnet, obwohl ln dort überhaupt nicht definiert ist.
  118.     
  119.     Stellt das  Programm  beim Zeichnen  einen mathematischen  Fehler  fest
  120.     (z.B. Wurzel aus einer  negativen Zahl), so erscheint nach dem Zeichnen
  121.     ein Requester,  der einen  auf einen  Fehler in  der Formel  aufmerksam
  122.     macht. Dieser Fehler kann  natürlich auch am Intervall liegen (oder bei
  123.     1/x  wurde eine Division  durch Null erkannt). Meistens  kann man diese
  124.     Meldung ignorieren,  besonder  wenn man  sie  schon erwartet  hat.  Sie
  125.     erscheint  hauptsächlich, um einen  zu zeigen, daß  beim Zeichnen etwas
  126.     geschummelt wurde. 
  127.     Jeder  Zeichenvorgang kann  durch einen Mausklick  in die Zeichenfläche
  128.     abgebrochen werden. Es erscheint  dann ein Requester, in dem man wählen
  129.     kann, ob weitergezeichnet oder abgebrochen werden soll.
  130.          
  131.    Diskussion
  132.     Unter  diesem Menupunkt kann  man sich eine  grobe Kurvendiskussion er-
  133.     stellen lassen  (Nullstellen,  Wendestellen und  Extremstellen).  Diese
  134.     Stellen werden  nur für  das eingegebene  Intervall bestimmt.  Außerdem
  135.     wird die  Funktion sowie die erste und  zweite Ableitung angezeigt. Bei
  136.     Extremstellen wird  angegeben, ob es ein Minimum  oder Maximum ist, bei 
  137.     Wendestellen,  ob es  eine  rechts-links  "Kurve" oder  umgekehrt  ist.
  138.     Nochmal zu  den symbolischen Ableitungen: Eingefleischten Mathematikern
  139.     mag  bei einigen der Ableitungen  die Haare zu Berge  stehen. Zum Einen
  140.     ist es  mit  der  Vereinfachung der  Terme  noch  nicht sehr  weit  her
  141.     (Immerhin:   0*irgendetwas    wird   nicht    angezeigt,   wohl    aber
  142.     (1-1)*irgendetwas....).
  143.     Aber  auch  rein   mathematisch  wird  manchmal  geschummelt.  Folgende
  144.     Ableitungen werden eingesetzt:
  145.                +-*/            :            Das übliche
  146.                x^a            :            a*x^(a-1)
  147.                a^x            :            a^x*ln(a)
  148.                f(x)^g(x)    :            (g(x)*ln(f(x)))'*f(x)^g(x)
  149.                      (Weiß jemand etwas besseres oder einfacheres ?)
  150.         trigonometr. Funktionen    :             Das übliche
  151.                abs(x)        :            sgn(x) (Für x=0 nicht richtig)
  152.                int(x)        :            0 (Läßt sich drüber diskutieren)
  153.                sgn(x)        :            0 (Läßt sich drüber diskutieren)
  154.     Das  Programm macht  nicht  deutlich,  wenn eine  nicht  ganz  korrekte
  155.     Ableitung  benutzt  wird.  Im  Zweifelsfall  die  nummerisch  bestimmte
  156.     Ableitung  mit  der  symbolisch  bestimmten  vergleichen,  sie  sollten
  157.     identisch sein. (Ausnahme: z.B. bei ln(x), siehe oben).
  158.     
  159.     ICH   ÜBERNEHME  KEINERLEI   VERANTWORTUNG  FÜR   DIE  RICHTIGKEIT  DER
  160.     ABLEITUNGEN  ODER  ANDERER  ERGEBNISSE  DIESES  PROGRAMMS  !!  WER  EIN
  161.     ERGEBNIS IN EINER  DIPLOMARBEIT ODER ÄHNLICHEN VERWENDET, SOLLTE LIEBER
  162.     NOCHMAL VON HAND NACHRECHNEN !!!!
  163.     
  164.     Zu einer vollständigen Kurvendiskussion fehlt noch einiges: z.B.
  165.                    - Angabe Definitionsbereich
  166.                    - Symetrie
  167.                    - Asymptoten etc.
  168.            (vielleicht später mal).
  169.   
  170.    Größe
  171.     In diesen  Menu kann man einstellen, ob auf  einer 640x256- oder 1000 x
  172.     300-Bitplane  gezeichnet werden soll. Da  die größere Möglichkeit nicht
  173.     in  ein Fenster  paßt, kann  man mit  den Cursor-Tasten  in der Bitplan
  174.     herumscrollen.  Mit ESC kommt  man in die obere/linke  Ecke zurück. Die
  175.     große Auflösung  eignet  sich besonders  gut  für Ausdrucke,  aber  man
  176.     sollte  dann einen  Drucker haben,  der auch  so viele  Punkte je Zeile
  177.     darstellen kann.
  178.   
  179.        
  180.   Hinweis
  181.   -------
  182.   Um  den  Code  klein   zu  halten,  wurde  eine  Stub-Routine  MemCleanup
  183.   eingefügt. Das  verringert  die  Codelänge bei  Lattice-Programmen  meist
  184.   etwas.  Bei anderen Compilern sollten  die entsprechenden Zeilen gelöscht
  185.   werden  (in Berechnungsroutinen.c). Für  Lattice-Besitzer: das C-Tutorial
  186.   auf Disk 4 beachten (V4.00).
  187.    
  188.   Bekannte Fehler:
  189.   ----------------
  190.   Es wäre schön, wenn ich hier KEINE hinschreiben (tippen) könnte. Aber das
  191.   wäre  nicht ganz richtig. Es  gibt ein paar kleine  Fehler, ich weiß aber
  192.   nicht, wo sie sind.
  193.    - Im  Quelltext muß  Mathieeebase als  extern deklariert  werden,  sonst
  194.   beschwert  sich der Linker.  Bei allen anderen  Library-Pointern kann man
  195.   einmal normal  deklarieren.  Dieser Fehler  liegt  wohl irgendwo  in  den
  196.   (Link)Libraries.
  197.    - Gelegentlich wird beim Zeichnen ein Funktionswert zu NULL bestimmt und
  198.   entsprechend gezeichnet. Das ergibt dann einen einzelnen Punkt oder einen
  199.   häßlichen  Haken. Dieser Fehler  ist nicht reproduzierbar,  d.h. läßt man
  200.   die gleiche Funktion sofort  nochmal zeichnen, passiert das gleiche nicht
  201.   nochmal. Wie kann sowas passieren ?
  202.    -  Gelegentlich   tritt  eine   TrapV-Exception  auf.   Die   anfälligen
  203.   Fix-Umwandlungen  (die diesen  Fehler scheinbar  produzieren können) habe
  204.   ich alle  überprüft,  wo nötig  auch eine  Sicherheitsabfrage  eingefügt.
  205.   Diese  Exception  entsteht  irgendwo  anders.  Sie  ist  ebenfalls  nicht
  206.   reproduzierbar.
  207.    
  208.   Die folgende Unzulänglichkeit werde ich vielleicht noch abstellen:
  209.    -  Die Fehlerabfragen im  Parser (der Programmteil  in der Tool.Library,
  210.   der  die  Strings  auswertet)   sind  nicht  die  besten.  Es  wird  zwar
  211.   verhindert, daß durch NULL geteilt wird, ebenfalls wird bemerkt, wenn von
  212.   einer negativen Zahl die Wurzel  oder der Log gebildet werden soll. Wurde
  213.   aber eine  sinnlose Funktion eingegeben, dann wird  das nicht bemerkt und
  214.   so weit  wie  möglich ausgewertet.  Wurden Funktionen  falsch  eingegeben
  215.   (sinn statt sin) oder  groß geschrieben, dann versucht das Programm, dies
  216.   als  Zahl zu  interpretieren,  was  natürlich recht  sinnlose  Ergebnisse
  217.   hervorbringt. Sollte irgendwann eine Funktion nicht so gezeichnet werden,
  218.   wie man  sich das ungefähr vorstellt, dann sollte  man überprüfen, ob man
  219.   sich irgendwo vertippt hat.      
  220.        
  221.   Falls jemand  Verbesserungsvorschläge, Fehlerkorrekturen  (oder auch  neu
  222.   entdeckte Fehler)  hat  (z.B. das  irgendeine Ableitung  falsch  gebildet
  223.   wird....ich  habe da  eigentlich  sehr  viel überprüft):  Meine  Addresse
  224.   befindet sich im File Plotter.Readme (die Hinweise dort bitte beachten).
  225.        
  226.        Viel Freude mit diesen Programm !!
  227.        
  228.      
  229.